#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 版权所有 (c) 2025   保留所有权利。
 * CLR版本：4.0.30319.42000
 * 机器名称：DESKTOP-GLJ2Q8J
 * 公司名称：
 * 命名空间：AutoCAD.EntityTools.Config
 * 唯一标识：d7144e4e-f0e0-4d03-a0ac-45fe42ceb523
 * 文件名：ImageHelper
 * 当前用户域：DESKTOP-GLJ2Q8J
 * 
 * 创建者： Guo_79991
 * 电子邮箱：xxxx@hotmail.com
 * 创建时间：2025/8/30 23:01:36
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>




namespace AutoCAD.EntityTools.Config
{
    /// <summary>
    /// ImageHelper 的摘要说明
    /// </summary>
    public static class ImageHelper
    {
        //老方法有bug背景黑
        //public static BitmapImage FileToBitmap(string imagePath)
        //{
        //    if (string.IsNullOrEmpty(imagePath))
        //    {
        //        return null; // 或者返回一个默认的BitmapImage对象
        //    }

        //    System.Drawing.Image image = GetImage(imagePath);
        //    if (image == null)
        //    {
        //        return null; // 图片获取失败，返回null
        //    }

        //    var signetData = PhotoImageInsert(image);
        //    if (signetData == null || signetData.Length == 0)
        //    {
        //        return null; // 数据转换失败，返回null
        //    }

        //    return ByteToBitmap(signetData);
        //}
        /// <summary>
        /// 优化
        /// . 确保 iconfont 图标本身是透明背景​​
        ///         检查你的 iconfont 图标文件（.png 或.svg），确保它本身是透明背景。
        ///                 如果图标本身有黑色背景，即使代码正确，显示时也会是黑色。
        /// </summary>
        /// <param name="imagePath"></param>
        /// <returns></returns>
        public static BitmapImage FileToBitmap(string imagePath)
        {
            if (string.IsNullOrEmpty(imagePath))
            {
                return null;
            }

            System.Drawing.Image image = GetImage(imagePath);
            if (image == null)
            {
                return null;
            }

            // 确保图片是 32 位 ARGB（带透明通道）
            Bitmap bitmap = new Bitmap(image.Width, image.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.DrawImage(image, 0, 0);
            }

            byte[] array;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                bitmap.Save(memoryStream, ImageFormat.Png); // 强制保存为 PNG
                array = memoryStream.ToArray();
            }

            return ByteToBitmap(array);
        }



        public static BitmapImage ByteToBitmap(byte[] signetData)
        {
            if (signetData == null || signetData.Length == 0)
            {
                return null; // 数据为空，返回null
            }

            BitmapImage bmp = null;
            try
            {
                bmp = new BitmapImage();
                bmp.BeginInit();
                bmp.StreamSource = new MemoryStream(signetData);
                bmp.EndInit();
            }
            catch (Exception)
            {
                bmp = null; // 发生异常，返回null
            }

            return bmp;
        }

        private static byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
        {
            if (imgPhoto == null)
            {
                return null; // 图片为空，返回null
            }

            //将Image转换成流数据，并保存为byte[]
            using (MemoryStream mstream = new MemoryStream())
            {
                imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg);
                return mstream.ToArray();
            }
        }

        private static System.Drawing.Image GetImage(string imagePath)
        {
            if (string.IsNullOrEmpty(imagePath))
            {
                return null; // 路径为空，返回null
            }

            using (FileStream fs = File.OpenRead(imagePath)) //OpenRead
            {
                if (fs.Length == 0)
                {
                    return null; // 文件为空，返回null
                }

                System.Drawing.Image result = System.Drawing.Image.FromStream(fs);
                return result;
            }
        }
    }
}